// $ANTLR 3.0.1 C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g 2008-08-20 15:26:29

package ac.jp.u_tokyo.SyncLib.language;
import java.util.LinkedList;
import java.util.List;


import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

public class LanguageParser extends Parser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "CONST", "GRAPH", "SWITCH", "DICTMAP", "EMAP", "KMAP", "NATIVE", "FACTORY", "TRUE", "FALSE", "OPTION", "CLASS", "VAR", "VARS", "PARAMETERS", "FACTORIES", "DICTS", "SYNC", "NULL", "DIGIT", "ULETTER", "LLETTER", "LETTER", "NUMBER", "NAME", "STRING", "COMMENT", "LINE_COMMENT", "WS", "INCLUDE", "'='", "'<'", "','", "'>'", "'{'", "';'", "'}'", "'['", "']'", "'('", "')'"
    };
    public static final int CLASS=15;
    public static final int OPTION=14;
    public static final int ULETTER=24;
    public static final int SYNC=21;
    public static final int PARAMETERS=18;
    public static final int LINE_COMMENT=31;
    public static final int GRAPH=5;
    public static final int LETTER=26;
    public static final int CONST=4;
    public static final int SWITCH=6;
    public static final int VARS=17;
    public static final int NULL=22;
    public static final int NUMBER=27;
    public static final int NATIVE=10;
    public static final int KMAP=9;
    public static final int EOF=-1;
    public static final int EMAP=8;
    public static final int FACTORY=11;
    public static final int TRUE=12;
    public static final int LLETTER=25;
    public static final int NAME=28;
    public static final int WS=32;
    public static final int DICTS=20;
    public static final int INCLUDE=33;
    public static final int DICTMAP=7;
    public static final int FACTORIES=19;
    public static final int VAR=16;
    public static final int DIGIT=23;
    public static final int COMMENT=30;
    public static final int FALSE=13;
    public static final int STRING=29;

        public LanguageParser(TokenStream input) {
            super(input);
        }
        

    public String[] getTokenNames() { return tokenNames; }
    public String getGrammarFileName() { return "C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g"; }

    
    Program _program;



    // $ANTLR start prog
    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:131:1: prog returns [Program result] : declarations[$result] EOF ;
    public final Program prog() throws RecognitionException {
        Program result = null;

        try {
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:132:2: ( declarations[$result] EOF )
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:132:4: declarations[$result] EOF
            {
            result = new Program();
            pushFollow(FOLLOW_declarations_in_prog504);
            declarations(result);
            _fsp--;

            match(input,EOF,FOLLOW_EOF_in_prog507); 

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return result;
    }
    // $ANTLR end prog


    // $ANTLR start declarations
    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:133:1: declarations[Program program] : ( literal_declaration[$program] | sync_declaration[$program] )* ;
    public final void declarations(Program program) throws RecognitionException {
        try {
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:133:31: ( ( literal_declaration[$program] | sync_declaration[$program] )* )
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:133:33: ( literal_declaration[$program] | sync_declaration[$program] )*
            {
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:133:33: ( literal_declaration[$program] | sync_declaration[$program] )*
            loop1:
            do {
                int alt1=3;
                int LA1_0 = input.LA(1);

                if ( (LA1_0==CONST) ) {
                    alt1=1;
                }
                else if ( (LA1_0==NAME) ) {
                    alt1=2;
                }


                switch (alt1) {
            	case 1 :
            	    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:133:34: literal_declaration[$program]
            	    {
            	    pushFollow(FOLLOW_literal_declaration_in_declarations516);
            	    literal_declaration(program);
            	    _fsp--;


            	    }
            	    break;
            	case 2 :
            	    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:133:67: sync_declaration[$program]
            	    {
            	    pushFollow(FOLLOW_sync_declaration_in_declarations522);
            	    sync_declaration(program);
            	    _fsp--;


            	    }
            	    break;

            	default :
            	    break loop1;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end declarations


    // $ANTLR start literal_declaration
    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:135:1: literal_declaration[Program program] : CONST NAME '=' primitive_value ;
    public final void literal_declaration(Program program) throws RecognitionException {
        Token NAME1=null;
        Const primitive_value2 = null;


        try {
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:136:2: ( CONST NAME '=' primitive_value )
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:136:4: CONST NAME '=' primitive_value
            {
            match(input,CONST,FOLLOW_CONST_in_literal_declaration536); 
            NAME1=(Token)input.LT(1);
            match(input,NAME,FOLLOW_NAME_in_literal_declaration538); 
            match(input,34,FOLLOW_34_in_literal_declaration540); 
            pushFollow(FOLLOW_primitive_value_in_literal_declaration542);
            primitive_value2=primitive_value();
            _fsp--;

            program.addConstDecl(NAME1.getText(), primitive_value2);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end literal_declaration


    // $ANTLR start sync_declaration
    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:138:1: sync_declaration[Program program] : NAME ( para_list[syncDecl] )? '=' sync_body[$program] ;
    public final void sync_declaration(Program program) throws RecognitionException {
        Token NAME3=null;
        SyncBody sync_body4 = null;


        try {
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:139:2: ( NAME ( para_list[syncDecl] )? '=' sync_body[$program] )
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:139:4: NAME ( para_list[syncDecl] )? '=' sync_body[$program]
            {
            NAME3=(Token)input.LT(1);
            match(input,NAME,FOLLOW_NAME_in_sync_declaration555); 
            SyncDecl syncDecl = new SyncDecl(NAME3.getText());
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:140:2: ( para_list[syncDecl] )?
            int alt2=2;
            int LA2_0 = input.LA(1);

            if ( (LA2_0==35) ) {
                alt2=1;
            }
            switch (alt2) {
                case 1 :
                    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:140:3: para_list[syncDecl]
                    {
                    pushFollow(FOLLOW_para_list_in_sync_declaration561);
                    para_list(syncDecl);
                    _fsp--;


                    }
                    break;

            }

            match(input,34,FOLLOW_34_in_sync_declaration566); 
            pushFollow(FOLLOW_sync_body_in_sync_declaration568);
            sync_body4=sync_body(program);
            _fsp--;

            syncDecl.setBody(sync_body4); program.addSyncDecl(NAME3.getText(), syncDecl);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end sync_declaration


    // $ANTLR start para_list
    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:142:1: para_list[HigherSyncDecl syncDecl] : '<' para_decl[syncDecl] ( ',' para_decl[syncDecl] )* '>' ;
    public final void para_list(SyncDecl syncDecl) throws RecognitionException {
        try {
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:143:2: ( '<' para_decl[syncDecl] ( ',' para_decl[syncDecl] )* '>' )
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:143:4: '<' para_decl[syncDecl] ( ',' para_decl[syncDecl] )* '>'
            {
            match(input,35,FOLLOW_35_in_para_list583); 
            pushFollow(FOLLOW_para_decl_in_para_list585);
            para_decl(syncDecl);
            _fsp--;

            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:143:28: ( ',' para_decl[syncDecl] )*
            loop3:
            do {
                int alt3=2;
                int LA3_0 = input.LA(1);

                if ( (LA3_0==36) ) {
                    alt3=1;
                }


                switch (alt3) {
            	case 1 :
            	    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:143:29: ',' para_decl[syncDecl]
            	    {
            	    match(input,36,FOLLOW_36_in_para_list589); 
            	    pushFollow(FOLLOW_para_decl_in_para_list592);
            	    para_decl(syncDecl);
            	    _fsp--;


            	    }
            	    break;

            	default :
            	    break loop3;
                }
            } while (true);

            match(input,37,FOLLOW_37_in_para_list598); 

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end para_list


    // $ANTLR start para_decl
    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:145:1: para_decl[HigherSyncDecl syncDecl] : NAME ( '=' primitive_value )? ;
    public final void para_decl(SyncDecl syncDecl) throws RecognitionException {
        Token NAME6=null;
        Const primitive_value5 = null;


        try {
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:146:2: ( NAME ( '=' primitive_value )? )
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:146:4: NAME ( '=' primitive_value )?
            {
            Const c = null;
            NAME6=(Token)input.LT(1);
            match(input,NAME,FOLLOW_NAME_in_para_decl611); 
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:148:2: ( '=' primitive_value )?
            int alt4=2;
            int LA4_0 = input.LA(1);

            if ( (LA4_0==34) ) {
                alt4=1;
            }
            switch (alt4) {
                case 1 :
                    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:148:3: '=' primitive_value
                    {
                    match(input,34,FOLLOW_34_in_para_decl616); 
                    pushFollow(FOLLOW_primitive_value_in_para_decl618);
                    primitive_value5=primitive_value();
                    _fsp--;

                    c = primitive_value5;

                    }
                    break;

            }

            if (c == null) syncDecl.addNonDefaultPara(NAME6.getText()); else syncDecl.addDefaultPara(NAME6.getText(), c);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end para_decl


    // $ANTLR start sync_body
    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:151:1: sync_body[Program program] returns [SyncConstruct result] : ( native_sync | sync_ref[$program] | graph[program] | switch_combinator[program] | dict[program] | edict[program] );
    public final SyncBody sync_body(Program program) throws RecognitionException {
        SyncBody result = null;

        NativeSyncBody native_sync7 = null;

        SyncRef sync_ref8 = null;

        GraphCombinatorBody graph9 = null;

        SwitchBody switch_combinator10 = null;

        DictMapBody dict11 = null;

        EDictMapBody edict12 = null;


        try {
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:152:2: ( native_sync | sync_ref[$program] | graph[program] | switch_combinator[program] | dict[program] | edict[program] )
            int alt5=6;
            switch ( input.LA(1) ) {
            case NATIVE:
                {
                alt5=1;
                }
                break;
            case NAME:
                {
                alt5=2;
                }
                break;
            case GRAPH:
                {
                alt5=3;
                }
                break;
            case SWITCH:
                {
                alt5=4;
                }
                break;
            case DICTMAP:
            case KMAP:
                {
                alt5=5;
                }
                break;
            case EMAP:
                {
                alt5=6;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("151:1: sync_body[Program program] returns [SyncConstruct result] : ( native_sync | sync_ref[$program] | graph[program] | switch_combinator[program] | dict[program] | edict[program] );", 5, 0, input);

                throw nvae;
            }

            switch (alt5) {
                case 1 :
                    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:152:4: native_sync
                    {
                    pushFollow(FOLLOW_native_sync_in_sync_body641);
                    native_sync7=native_sync();
                    _fsp--;

                    result = native_sync7;

                    }
                    break;
                case 2 :
                    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:153:4: sync_ref[$program]
                    {
                    pushFollow(FOLLOW_sync_ref_in_sync_body648);
                    sync_ref8=sync_ref(program);
                    _fsp--;

                    result = sync_ref8;

                    }
                    break;
                case 3 :
                    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:154:4: graph[program]
                    {
                    pushFollow(FOLLOW_graph_in_sync_body657);
                    graph9=graph(program);
                    _fsp--;

                    result = graph9;

                    }
                    break;
                case 4 :
                    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:155:4: switch_combinator[program]
                    {
                    pushFollow(FOLLOW_switch_combinator_in_sync_body665);
                    switch_combinator10=switch_combinator(program);
                    _fsp--;

                    result = switch_combinator10;

                    }
                    break;
                case 5 :
                    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:156:4: dict[program]
                    {
                    pushFollow(FOLLOW_dict_in_sync_body673);
                    dict11=dict(program);
                    _fsp--;

                    result = dict11;

                    }
                    break;
                case 6 :
                    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:157:4: edict[program]
                    {
                    pushFollow(FOLLOW_edict_in_sync_body681);
                    edict12=edict(program);
                    _fsp--;

                    result = edict12;

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return result;
    }
    // $ANTLR end sync_body


    // $ANTLR start switch_combinator
    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:159:1: switch_combinator[Program program] returns [SwitchBody result] : SWITCH '{' ( sync_body[program] ';' )+ '}' ;
    public final SwitchBody switch_combinator(Program program) throws RecognitionException {
        SwitchBody result = null;

        Token SWITCH13=null;
        SyncBody sync_body14 = null;


        try {
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:160:2: ( SWITCH '{' ( sync_body[program] ';' )+ '}' )
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:160:4: SWITCH '{' ( sync_body[program] ';' )+ '}'
            {
            SWITCH13=(Token)input.LT(1);
            match(input,SWITCH,FOLLOW_SWITCH_in_switch_combinator700); 
             result = new SwitchBody(SWITCH13.getLine());
            match(input,38,FOLLOW_38_in_switch_combinator705); 
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:161:6: ( sync_body[program] ';' )+
            int cnt6=0;
            loop6:
            do {
                int alt6=2;
                int LA6_0 = input.LA(1);

                if ( ((LA6_0>=GRAPH && LA6_0<=NATIVE)||LA6_0==NAME) ) {
                    alt6=1;
                }


                switch (alt6) {
            	case 1 :
            	    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:161:7: sync_body[program] ';'
            	    {
            	    pushFollow(FOLLOW_sync_body_in_switch_combinator708);
            	    sync_body14=sync_body(program);
            	    _fsp--;

            	    result.addInnerSync(sync_body14);
            	    match(input,39,FOLLOW_39_in_switch_combinator713); 

            	    }
            	    break;

            	default :
            	    if ( cnt6 >= 1 ) break loop6;
                        EarlyExitException eee =
                            new EarlyExitException(6, input);
                        throw eee;
                }
                cnt6++;
            } while (true);

            match(input,40,FOLLOW_40_in_switch_combinator717); 

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return result;
    }
    // $ANTLR end switch_combinator


    // $ANTLR start dict
    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:163:1: dict[Program program] returns [DictMapBody result] : ( DICTMAP | KMAP ) '{' SYNC '=' sync_body[program] ';' FACTORIES '=' '[' factory_list[$result] ']' ';' '}' ;
    public final DictMapBody dict(Program program) throws RecognitionException {
        DictMapBody result = null;

        Token DICTMAP15=null;
        Token KMAP16=null;
        SyncBody sync_body17 = null;


        try {
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:164:2: ( ( DICTMAP | KMAP ) '{' SYNC '=' sync_body[program] ';' FACTORIES '=' '[' factory_list[$result] ']' ';' '}' )
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:164:4: ( DICTMAP | KMAP ) '{' SYNC '=' sync_body[program] ';' FACTORIES '=' '[' factory_list[$result] ']' ';' '}'
            {
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:164:4: ( DICTMAP | KMAP )
            int alt7=2;
            int LA7_0 = input.LA(1);

            if ( (LA7_0==DICTMAP) ) {
                alt7=1;
            }
            else if ( (LA7_0==KMAP) ) {
                alt7=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("164:4: ( DICTMAP | KMAP )", 7, 0, input);

                throw nvae;
            }
            switch (alt7) {
                case 1 :
                    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:164:5: DICTMAP
                    {
                    DICTMAP15=(Token)input.LT(1);
                    match(input,DICTMAP,FOLLOW_DICTMAP_in_dict733); 
                     result = new DictMapBody(DICTMAP15.getLine()); 

                    }
                    break;
                case 2 :
                    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:165:5: KMAP
                    {
                    KMAP16=(Token)input.LT(1);
                    match(input,KMAP,FOLLOW_KMAP_in_dict741); 
                    result = new KeyDictMapBody(KMAP16.getLine());

                    }
                    break;

            }

            match(input,38,FOLLOW_38_in_dict747); 
            match(input,SYNC,FOLLOW_SYNC_in_dict752); 
            match(input,34,FOLLOW_34_in_dict754); 
            pushFollow(FOLLOW_sync_body_in_dict756);
            sync_body17=sync_body(program);
            _fsp--;

            match(input,39,FOLLOW_39_in_dict759); 
            match(input,FACTORIES,FOLLOW_FACTORIES_in_dict762); 
            match(input,34,FOLLOW_34_in_dict764); 
            match(input,41,FOLLOW_41_in_dict766); 
            pushFollow(FOLLOW_factory_list_in_dict768);
            factory_list(result);
            _fsp--;

            match(input,42,FOLLOW_42_in_dict771); 
            match(input,39,FOLLOW_39_in_dict773); 
            match(input,40,FOLLOW_40_in_dict777); 
            result.setInner(sync_body17);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return result;
    }
    // $ANTLR end dict


    // $ANTLR start edict
    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:171:1: edict[Program program] returns [EDictMapBody result] : EMAP '{' SYNC '=' sync_body[program] ';' DICTS '=' primitive_value ';' '}' ;
    public final EDictMapBody edict(Program program) throws RecognitionException {
        EDictMapBody result = null;

        Token EMAP18=null;
        SyncBody sync_body19 = null;

        Const primitive_value20 = null;


        try {
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:172:2: ( EMAP '{' SYNC '=' sync_body[program] ';' DICTS '=' primitive_value ';' '}' )
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:172:4: EMAP '{' SYNC '=' sync_body[program] ';' DICTS '=' primitive_value ';' '}'
            {
            EMAP18=(Token)input.LT(1);
            match(input,EMAP,FOLLOW_EMAP_in_edict794); 
            match(input,38,FOLLOW_38_in_edict798); 
            match(input,SYNC,FOLLOW_SYNC_in_edict803); 
            match(input,34,FOLLOW_34_in_edict805); 
            pushFollow(FOLLOW_sync_body_in_edict807);
            sync_body19=sync_body(program);
            _fsp--;

            match(input,39,FOLLOW_39_in_edict810); 
            match(input,DICTS,FOLLOW_DICTS_in_edict813); 
            match(input,34,FOLLOW_34_in_edict815); 
            pushFollow(FOLLOW_primitive_value_in_edict817);
            primitive_value20=primitive_value();
            _fsp--;

            match(input,39,FOLLOW_39_in_edict819); 
            match(input,40,FOLLOW_40_in_edict822); 
             result = new EDictMapBody(EMAP18.getLine(), sync_body19, primitive_value20); 

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return result;
    }
    // $ANTLR end edict


    // $ANTLR start factory_list
    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:178:1: factory_list[DictMapBody b] : v1= primitive_value ( ',' v2= primitive_value )* ;
    public final void factory_list(DictMapBody b) throws RecognitionException {
        Const v1 = null;

        Const v2 = null;


        try {
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:179:2: (v1= primitive_value ( ',' v2= primitive_value )* )
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:179:4: v1= primitive_value ( ',' v2= primitive_value )*
            {
            pushFollow(FOLLOW_primitive_value_in_factory_list837);
            v1=primitive_value();
            _fsp--;

            b.addFactory(v1);
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:180:2: ( ',' v2= primitive_value )*
            loop8:
            do {
                int alt8=2;
                int LA8_0 = input.LA(1);

                if ( (LA8_0==36) ) {
                    alt8=1;
                }


                switch (alt8) {
            	case 1 :
            	    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:180:3: ',' v2= primitive_value
            	    {
            	    match(input,36,FOLLOW_36_in_factory_list844); 
            	    pushFollow(FOLLOW_primitive_value_in_factory_list848);
            	    v2=primitive_value();
            	    _fsp--;

            	    b.addFactory(v2);

            	    }
            	    break;

            	default :
            	    break loop8;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end factory_list


    // $ANTLR start graph
    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:183:1: graph[Program program] returns [GraphCombinatorBody result] : GRAPH '(' p= var_list ')' '{' ( ( VAR | VARS ) '=' v= var_list ';' )? ( sync_connection[program, result] )* '}' ;
    public final GraphCombinatorBody graph(Program program) throws RecognitionException {
        GraphCombinatorBody result = null;

        Token GRAPH21=null;
        List p = null;

        List v = null;


        try {
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:184:2: ( GRAPH '(' p= var_list ')' '{' ( ( VAR | VARS ) '=' v= var_list ';' )? ( sync_connection[program, result] )* '}' )
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:184:4: GRAPH '(' p= var_list ')' '{' ( ( VAR | VARS ) '=' v= var_list ';' )? ( sync_connection[program, result] )* '}'
            {
            GRAPH21=(Token)input.LT(1);
            match(input,GRAPH,FOLLOW_GRAPH_in_graph869); 
            result = new GraphCombinatorBody(GRAPH21.getLine());
            match(input,43,FOLLOW_43_in_graph875); 
            pushFollow(FOLLOW_var_list_in_graph879);
            p=var_list();
            _fsp--;

            match(input,44,FOLLOW_44_in_graph881); 
            result.addParameters(p);
            match(input,38,FOLLOW_38_in_graph887); 
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:187:3: ( ( VAR | VARS ) '=' v= var_list ';' )?
            int alt9=2;
            int LA9_0 = input.LA(1);

            if ( ((LA9_0>=VAR && LA9_0<=VARS)) ) {
                alt9=1;
            }
            switch (alt9) {
                case 1 :
                    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:187:4: ( VAR | VARS ) '=' v= var_list ';'
                    {
                    if ( (input.LA(1)>=VAR && input.LA(1)<=VARS) ) {
                        input.consume();
                        errorRecovery=false;
                    }
                    else {
                        MismatchedSetException mse =
                            new MismatchedSetException(null,input);
                        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_graph892);    throw mse;
                    }

                    match(input,34,FOLLOW_34_in_graph900); 
                    pushFollow(FOLLOW_var_list_in_graph904);
                    v=var_list();
                    _fsp--;

                    match(input,39,FOLLOW_39_in_graph906); 
                    result.addOtherVars(v);

                    }
                    break;

            }

            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:188:3: ( sync_connection[program, result] )*
            loop10:
            do {
                int alt10=2;
                int LA10_0 = input.LA(1);

                if ( ((LA10_0>=GRAPH && LA10_0<=NATIVE)||LA10_0==NAME) ) {
                    alt10=1;
                }


                switch (alt10) {
            	case 1 :
            	    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:188:4: sync_connection[program, result]
            	    {
            	    pushFollow(FOLLOW_sync_connection_in_graph916);
            	    sync_connection(program,  result);
            	    _fsp--;


            	    }
            	    break;

            	default :
            	    break loop10;
                }
            } while (true);

            match(input,40,FOLLOW_40_in_graph923); 

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return result;
    }
    // $ANTLR end graph


    // $ANTLR start var_list
    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:191:1: var_list returns [List varList] : n1= NAME ( ',' n2= NAME )* ;
    public final List var_list() throws RecognitionException {
        List varList = null;

        Token n1=null;
        Token n2=null;

        try {
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:192:2: (n1= NAME ( ',' n2= NAME )* )
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:192:4: n1= NAME ( ',' n2= NAME )*
            {
            varList = new LinkedList();
            n1=(Token)input.LT(1);
            match(input,NAME,FOLLOW_NAME_in_var_list942); 
            varList.add(new GraphCombinatorBody.Var(n1.getLine(), n1.getText()));
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:194:2: ( ',' n2= NAME )*
            loop11:
            do {
                int alt11=2;
                int LA11_0 = input.LA(1);

                if ( (LA11_0==36) ) {
                    alt11=1;
                }


                switch (alt11) {
            	case 1 :
            	    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:194:3: ',' n2= NAME
            	    {
            	    match(input,36,FOLLOW_36_in_var_list948); 
            	    n2=(Token)input.LT(1);
            	    match(input,NAME,FOLLOW_NAME_in_var_list952); 
            	    varList.add(new GraphCombinatorBody.Var(n2.getLine(), n2.getText()));

            	    }
            	    break;

            	default :
            	    break loop11;
                }
            } while (true);


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return varList;
    }
    // $ANTLR end var_list


    // $ANTLR start sync_connection
    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:196:1: sync_connection[Program program, GraphCombinatorBody g] : sync_body[program] '(' var_list ')' ';' ;
    public final void sync_connection(Program program, GraphCombinatorBody g) throws RecognitionException {
        SyncBody sync_body22 = null;

        List var_list23 = null;


        try {
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:197:2: ( sync_body[program] '(' var_list ')' ';' )
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:197:4: sync_body[program] '(' var_list ')' ';'
            {
            pushFollow(FOLLOW_sync_body_in_sync_connection967);
            sync_body22=sync_body(program);
            _fsp--;

            match(input,43,FOLLOW_43_in_sync_connection970); 
            pushFollow(FOLLOW_var_list_in_sync_connection972);
            var_list23=var_list();
            _fsp--;

            match(input,44,FOLLOW_44_in_sync_connection974); 
            match(input,39,FOLLOW_39_in_sync_connection976); 
            g.addConnection(sync_body22, var_list23);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end sync_connection


    // $ANTLR start sync_ref
    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:200:1: sync_ref[Program program] returns [SyncRefConstruct result] : NAME ( arg_list[$result] )? ;
    public final SyncRef sync_ref(Program program) throws RecognitionException {
        SyncRef result = null;

        Token NAME24=null;

        try {
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:201:2: ( NAME ( arg_list[$result] )? )
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:201:4: NAME ( arg_list[$result] )?
            {
            NAME24=(Token)input.LT(1);
            match(input,NAME,FOLLOW_NAME_in_sync_ref995); 
            result = new SyncRef(NAME24.getLine(), program, NAME24.getText());
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:202:2: ( arg_list[$result] )?
            int alt12=2;
            int LA12_0 = input.LA(1);

            if ( (LA12_0==35) ) {
                alt12=1;
            }
            switch (alt12) {
                case 1 :
                    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:202:3: arg_list[$result]
                    {
                    pushFollow(FOLLOW_arg_list_in_sync_ref1001);
                    arg_list(result);
                    _fsp--;


                    }
                    break;

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return result;
    }
    // $ANTLR end sync_ref


    // $ANTLR start arg_list
    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:204:1: arg_list[SyncRefConstruct s] : '<' arg_decl[s] ( ',' arg_decl[s] )* '>' ;
    public final void arg_list(SyncRef s) throws RecognitionException {
        try {
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:204:21: ( '<' arg_decl[s] ( ',' arg_decl[s] )* '>' )
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:204:23: '<' arg_decl[s] ( ',' arg_decl[s] )* '>'
            {
            match(input,35,FOLLOW_35_in_arg_list1013); 
            pushFollow(FOLLOW_arg_decl_in_arg_list1015);
            arg_decl(s);
            _fsp--;

            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:204:39: ( ',' arg_decl[s] )*
            loop13:
            do {
                int alt13=2;
                int LA13_0 = input.LA(1);

                if ( (LA13_0==36) ) {
                    alt13=1;
                }


                switch (alt13) {
            	case 1 :
            	    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:204:40: ',' arg_decl[s]
            	    {
            	    match(input,36,FOLLOW_36_in_arg_list1019); 
            	    pushFollow(FOLLOW_arg_decl_in_arg_list1021);
            	    arg_decl(s);
            	    _fsp--;


            	    }
            	    break;

            	default :
            	    break loop13;
                }
            } while (true);

            match(input,37,FOLLOW_37_in_arg_list1026); 

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end arg_list


    // $ANTLR start arg_decl
    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:205:1: arg_decl[SyncRefConstruct s] : NAME '=' primitive_value ;
    public final void arg_decl(SyncRef s) throws RecognitionException {
        Token NAME25=null;
        Const primitive_value26 = null;


        try {
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:205:21: ( NAME '=' primitive_value )
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:205:23: NAME '=' primitive_value
            {
            NAME25=(Token)input.LT(1);
            match(input,NAME,FOLLOW_NAME_in_arg_decl1034); 
            match(input,34,FOLLOW_34_in_arg_decl1036); 
            pushFollow(FOLLOW_primitive_value_in_arg_decl1038);
            primitive_value26=primitive_value();
            _fsp--;

             s.addArg(NAME25.getText(), primitive_value26);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end arg_decl


    // $ANTLR start native_sync
    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:207:1: native_sync returns [NativeSyncBody result] : NATIVE '{' FACTORY '=' string ';' PARAMETERS '=' NUMBER ';' ( option[$result] ';' )* '}' ;
    public final NativeSyncBody native_sync() throws RecognitionException {
        NativeSyncBody result = null;

        Token NATIVE27=null;
        Token NUMBER29=null;
        string_return string28 = null;


        try {
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:208:2: ( NATIVE '{' FACTORY '=' string ';' PARAMETERS '=' NUMBER ';' ( option[$result] ';' )* '}' )
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:208:4: NATIVE '{' FACTORY '=' string ';' PARAMETERS '=' NUMBER ';' ( option[$result] ';' )* '}'
            {
            NATIVE27=(Token)input.LT(1);
            match(input,NATIVE,FOLLOW_NATIVE_in_native_sync1054); 
            match(input,38,FOLLOW_38_in_native_sync1056); 
            match(input,FACTORY,FOLLOW_FACTORY_in_native_sync1061); 
            match(input,34,FOLLOW_34_in_native_sync1063); 
            pushFollow(FOLLOW_string_in_native_sync1065);
            string28=string();
            _fsp--;

            match(input,39,FOLLOW_39_in_native_sync1068); 
            match(input,PARAMETERS,FOLLOW_PARAMETERS_in_native_sync1072); 
            match(input,34,FOLLOW_34_in_native_sync1074); 
            NUMBER29=(Token)input.LT(1);
            match(input,NUMBER,FOLLOW_NUMBER_in_native_sync1076); 
            match(input,39,FOLLOW_39_in_native_sync1078); 
             result = new NativeSyncBody(NATIVE27.getLine(), string28.text, new Integer(NUMBER29.getText()));
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:211:3: ( option[$result] ';' )*
            loop14:
            do {
                int alt14=2;
                int LA14_0 = input.LA(1);

                if ( (LA14_0==OPTION) ) {
                    alt14=1;
                }


                switch (alt14) {
            	case 1 :
            	    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:211:4: option[$result] ';'
            	    {
            	    pushFollow(FOLLOW_option_in_native_sync1086);
            	    option(result);
            	    _fsp--;

            	    match(input,39,FOLLOW_39_in_native_sync1089); 

            	    }
            	    break;

            	default :
            	    break loop14;
                }
            } while (true);

            match(input,40,FOLLOW_40_in_native_sync1095); 

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return result;
    }
    // $ANTLR end native_sync


    // $ANTLR start option
    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:214:1: option[NativeSyncBody s] : OPTION NAME '=' primitive_value ;
    public final void option(NativeSyncBody s) throws RecognitionException {
        Token NAME30=null;
        Const primitive_value31 = null;


        try {
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:215:2: ( OPTION NAME '=' primitive_value )
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:215:4: OPTION NAME '=' primitive_value
            {
            match(input,OPTION,FOLLOW_OPTION_in_option1106); 
            NAME30=(Token)input.LT(1);
            match(input,NAME,FOLLOW_NAME_in_option1108); 
            match(input,34,FOLLOW_34_in_option1110); 
            pushFollow(FOLLOW_primitive_value_in_option1112);
            primitive_value31=primitive_value();
            _fsp--;

             s.addOption(NAME30.getText(), primitive_value31);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return ;
    }
    // $ANTLR end option


    // $ANTLR start primitive_value
    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:217:1: primitive_value returns [Const result] : ( boolean_value | string | NUMBER | obj_creation | value_ref | NULL | '[' value_list ']' );
    public final Const primitive_value() throws RecognitionException {
        Const result = null;

        Token NUMBER34=null;
        Token NULL37=null;
        BooleanConst boolean_value32 = null;

        string_return string33 = null;

        ObjCreation obj_creation35 = null;

        ConstRef value_ref36 = null;

        ArrayConst value_list38 = null;


        try {
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:218:2: ( boolean_value | string | NUMBER | obj_creation | value_ref | NULL | '[' value_list ']' )
            int alt15=7;
            switch ( input.LA(1) ) {
            case TRUE:
            case FALSE:
                {
                alt15=1;
                }
                break;
            case STRING:
                {
                alt15=2;
                }
                break;
            case NUMBER:
                {
                alt15=3;
                }
                break;
            case CLASS:
                {
                alt15=4;
                }
                break;
            case NAME:
                {
                alt15=5;
                }
                break;
            case NULL:
                {
                alt15=6;
                }
                break;
            case 41:
                {
                alt15=7;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("217:1: primitive_value returns [Const result] : ( boolean_value | string | NUMBER | obj_creation | value_ref | NULL | '[' value_list ']' );", 15, 0, input);

                throw nvae;
            }

            switch (alt15) {
                case 1 :
                    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:218:4: boolean_value
                    {
                    pushFollow(FOLLOW_boolean_value_in_primitive_value1127);
                    boolean_value32=boolean_value();
                    _fsp--;

                    result = boolean_value32;

                    }
                    break;
                case 2 :
                    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:219:4: string
                    {
                    pushFollow(FOLLOW_string_in_primitive_value1135);
                    string33=string();
                    _fsp--;

                    result = new StringConst(string33.line, string33.text);

                    }
                    break;
                case 3 :
                    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:220:4: NUMBER
                    {
                    NUMBER34=(Token)input.LT(1);
                    match(input,NUMBER,FOLLOW_NUMBER_in_primitive_value1142); 
                    result = new IntegerConst(NUMBER34.getLine(), new Integer(NUMBER34.getText()));

                    }
                    break;
                case 4 :
                    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:221:4: obj_creation
                    {
                    pushFollow(FOLLOW_obj_creation_in_primitive_value1149);
                    obj_creation35=obj_creation();
                    _fsp--;

                    result = obj_creation35;

                    }
                    break;
                case 5 :
                    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:222:4: value_ref
                    {
                    pushFollow(FOLLOW_value_ref_in_primitive_value1157);
                    value_ref36=value_ref();
                    _fsp--;

                    result = value_ref36;

                    }
                    break;
                case 6 :
                    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:223:4: NULL
                    {
                    NULL37=(Token)input.LT(1);
                    match(input,NULL,FOLLOW_NULL_in_primitive_value1164); 
                    result = new NullConst(NULL37.getLine());

                    }
                    break;
                case 7 :
                    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:224:4: '[' value_list ']'
                    {
                    match(input,41,FOLLOW_41_in_primitive_value1171); 
                    pushFollow(FOLLOW_value_list_in_primitive_value1173);
                    value_list38=value_list();
                    _fsp--;

                    match(input,42,FOLLOW_42_in_primitive_value1176); 
                    result = value_list38;

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return result;
    }
    // $ANTLR end primitive_value


    // $ANTLR start value_list
    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:226:1: value_list returns [ArrayConst result] : (p1= primitive_value ( ',' p2= primitive_value )* )? ;
    public final ArrayConst value_list() throws RecognitionException {
        ArrayConst result = null;

        Const p1 = null;

        Const p2 = null;


        try {
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:227:2: ( (p1= primitive_value ( ',' p2= primitive_value )* )? )
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:228:2: (p1= primitive_value ( ',' p2= primitive_value )* )?
            {
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:228:2: (p1= primitive_value ( ',' p2= primitive_value )* )?
            int alt17=2;
            int LA17_0 = input.LA(1);

            if ( ((LA17_0>=TRUE && LA17_0<=FALSE)||LA17_0==CLASS||LA17_0==NULL||(LA17_0>=NUMBER && LA17_0<=STRING)||LA17_0==41) ) {
                alt17=1;
            }
            switch (alt17) {
                case 1 :
                    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:228:3: p1= primitive_value ( ',' p2= primitive_value )*
                    {
                    pushFollow(FOLLOW_primitive_value_in_value_list1196);
                    p1=primitive_value();
                    _fsp--;

                    result = new ArrayConst(p1.line);result.addInner(p1);
                    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:229:2: ( ',' p2= primitive_value )*
                    loop16:
                    do {
                        int alt16=2;
                        int LA16_0 = input.LA(1);

                        if ( (LA16_0==36) ) {
                            alt16=1;
                        }


                        switch (alt16) {
                    	case 1 :
                    	    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:229:3: ',' p2= primitive_value
                    	    {
                    	    match(input,36,FOLLOW_36_in_value_list1203); 
                    	    pushFollow(FOLLOW_primitive_value_in_value_list1207);
                    	    p2=primitive_value();
                    	    _fsp--;

                    	    result.addInner(p2);

                    	    }
                    	    break;

                    	default :
                    	    break loop16;
                        }
                    } while (true);


                    }
                    break;

            }


            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return result;
    }
    // $ANTLR end value_list


    // $ANTLR start boolean_value
    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:231:1: boolean_value returns [BooleanConst result] : ( TRUE | FALSE );
    public final BooleanConst boolean_value() throws RecognitionException {
        BooleanConst result = null;

        Token TRUE39=null;
        Token FALSE40=null;

        try {
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:232:2: ( TRUE | FALSE )
            int alt18=2;
            int LA18_0 = input.LA(1);

            if ( (LA18_0==TRUE) ) {
                alt18=1;
            }
            else if ( (LA18_0==FALSE) ) {
                alt18=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("231:1: boolean_value returns [BooleanConst result] : ( TRUE | FALSE );", 18, 0, input);

                throw nvae;
            }
            switch (alt18) {
                case 1 :
                    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:232:4: TRUE
                    {
                    TRUE39=(Token)input.LT(1);
                    match(input,TRUE,FOLLOW_TRUE_in_boolean_value1226); 
                    result = new BooleanConst(TRUE39.getLine(), true);

                    }
                    break;
                case 2 :
                    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:233:4: FALSE
                    {
                    FALSE40=(Token)input.LT(1);
                    match(input,FALSE,FOLLOW_FALSE_in_boolean_value1233); 
                    result = new BooleanConst(FALSE40.getLine(), false);

                    }
                    break;

            }
        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return result;
    }
    // $ANTLR end boolean_value


    // $ANTLR start obj_creation
    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:235:1: obj_creation returns [ObjCreation result] : CLASS string ;
    public final ObjCreation obj_creation() throws RecognitionException {
        ObjCreation result = null;

        string_return string41 = null;


        try {
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:236:2: ( CLASS string )
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:236:4: CLASS string
            {
            match(input,CLASS,FOLLOW_CLASS_in_obj_creation1248); 
            pushFollow(FOLLOW_string_in_obj_creation1250);
            string41=string();
            _fsp--;

            result = new ObjCreation(string41.line, string41.text);

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return result;
    }
    // $ANTLR end obj_creation


    // $ANTLR start value_ref
    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:237:1: value_ref returns [ConstRef result] : NAME ;
    public final ConstRef value_ref() throws RecognitionException {
        ConstRef result = null;

        Token NAME42=null;

        try {
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:238:2: ( NAME )
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:238:4: NAME
            {
            NAME42=(Token)input.LT(1);
            match(input,NAME,FOLLOW_NAME_in_value_ref1265); 
            result = new ConstRef(NAME42.getLine(), NAME42.getText());

            }

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return result;
    }
    // $ANTLR end value_ref

    public static class string_return extends ParserRuleReturnScope {
        public String text;
        public int line;
    };

    // $ANTLR start string
    // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:240:1: string returns [String text, int line] : STRING ;
    public final string_return string() throws RecognitionException {
        string_return retval = new string_return();
        retval.start = input.LT(1);

        Token STRING43=null;

        try {
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:241:2: ( STRING )
            // C:\\Documents and Settings\\t2ladmin\\My Documents\\Projects\\2008\\OS3\\SyncLib\\src\\ac\\jp\\u_tokyo\\SyncLib\\language\\Language.g:241:4: STRING
            {
            STRING43=(Token)input.LT(1);
            match(input,STRING,FOLLOW_STRING_in_string1280); 
            retval.text = STRING43.getText().substring(1, STRING43.getText().length() - 1); retval.line = STRING43.getLine();

            }

            retval.stop = input.LT(-1);

        }
        catch (RecognitionException re) {
            reportError(re);
            recover(input,re);
        }
        finally {
        }
        return retval;
    }
    // $ANTLR end string


 

    public static final BitSet FOLLOW_declarations_in_prog504 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_prog507 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_literal_declaration_in_declarations516 = new BitSet(new long[]{0x0000000010000012L});
    public static final BitSet FOLLOW_sync_declaration_in_declarations522 = new BitSet(new long[]{0x0000000010000012L});
    public static final BitSet FOLLOW_CONST_in_literal_declaration536 = new BitSet(new long[]{0x0000000010000000L});
    public static final BitSet FOLLOW_NAME_in_literal_declaration538 = new BitSet(new long[]{0x0000000400000000L});
    public static final BitSet FOLLOW_34_in_literal_declaration540 = new BitSet(new long[]{0x000002003840B000L});
    public static final BitSet FOLLOW_primitive_value_in_literal_declaration542 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_NAME_in_sync_declaration555 = new BitSet(new long[]{0x0000000C00000000L});
    public static final BitSet FOLLOW_para_list_in_sync_declaration561 = new BitSet(new long[]{0x0000000400000000L});
    public static final BitSet FOLLOW_34_in_sync_declaration566 = new BitSet(new long[]{0x00000000100007E0L});
    public static final BitSet FOLLOW_sync_body_in_sync_declaration568 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_35_in_para_list583 = new BitSet(new long[]{0x0000000010000000L});
    public static final BitSet FOLLOW_para_decl_in_para_list585 = new BitSet(new long[]{0x0000003000000000L});
    public static final BitSet FOLLOW_36_in_para_list589 = new BitSet(new long[]{0x0000000010000000L});
    public static final BitSet FOLLOW_para_decl_in_para_list592 = new BitSet(new long[]{0x0000003000000000L});
    public static final BitSet FOLLOW_37_in_para_list598 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_NAME_in_para_decl611 = new BitSet(new long[]{0x0000000400000002L});
    public static final BitSet FOLLOW_34_in_para_decl616 = new BitSet(new long[]{0x000002003840B000L});
    public static final BitSet FOLLOW_primitive_value_in_para_decl618 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_native_sync_in_sync_body641 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_sync_ref_in_sync_body648 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_graph_in_sync_body657 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_switch_combinator_in_sync_body665 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_dict_in_sync_body673 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_edict_in_sync_body681 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_SWITCH_in_switch_combinator700 = new BitSet(new long[]{0x0000004000000000L});
    public static final BitSet FOLLOW_38_in_switch_combinator705 = new BitSet(new long[]{0x00000000100007E0L});
    public static final BitSet FOLLOW_sync_body_in_switch_combinator708 = new BitSet(new long[]{0x0000008000000000L});
    public static final BitSet FOLLOW_39_in_switch_combinator713 = new BitSet(new long[]{0x00000100100007E0L});
    public static final BitSet FOLLOW_40_in_switch_combinator717 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_DICTMAP_in_dict733 = new BitSet(new long[]{0x0000004000000000L});
    public static final BitSet FOLLOW_KMAP_in_dict741 = new BitSet(new long[]{0x0000004000000000L});
    public static final BitSet FOLLOW_38_in_dict747 = new BitSet(new long[]{0x0000000000200000L});
    public static final BitSet FOLLOW_SYNC_in_dict752 = new BitSet(new long[]{0x0000000400000000L});
    public static final BitSet FOLLOW_34_in_dict754 = new BitSet(new long[]{0x00000000100007E0L});
    public static final BitSet FOLLOW_sync_body_in_dict756 = new BitSet(new long[]{0x0000008000000000L});
    public static final BitSet FOLLOW_39_in_dict759 = new BitSet(new long[]{0x0000000000080000L});
    public static final BitSet FOLLOW_FACTORIES_in_dict762 = new BitSet(new long[]{0x0000000400000000L});
    public static final BitSet FOLLOW_34_in_dict764 = new BitSet(new long[]{0x0000020000000000L});
    public static final BitSet FOLLOW_41_in_dict766 = new BitSet(new long[]{0x000002003840B000L});
    public static final BitSet FOLLOW_factory_list_in_dict768 = new BitSet(new long[]{0x0000040000000000L});
    public static final BitSet FOLLOW_42_in_dict771 = new BitSet(new long[]{0x0000008000000000L});
    public static final BitSet FOLLOW_39_in_dict773 = new BitSet(new long[]{0x0000010000000000L});
    public static final BitSet FOLLOW_40_in_dict777 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_EMAP_in_edict794 = new BitSet(new long[]{0x0000004000000000L});
    public static final BitSet FOLLOW_38_in_edict798 = new BitSet(new long[]{0x0000000000200000L});
    public static final BitSet FOLLOW_SYNC_in_edict803 = new BitSet(new long[]{0x0000000400000000L});
    public static final BitSet FOLLOW_34_in_edict805 = new BitSet(new long[]{0x00000000100007E0L});
    public static final BitSet FOLLOW_sync_body_in_edict807 = new BitSet(new long[]{0x0000008000000000L});
    public static final BitSet FOLLOW_39_in_edict810 = new BitSet(new long[]{0x0000000000100000L});
    public static final BitSet FOLLOW_DICTS_in_edict813 = new BitSet(new long[]{0x0000000400000000L});
    public static final BitSet FOLLOW_34_in_edict815 = new BitSet(new long[]{0x000002003840B000L});
    public static final BitSet FOLLOW_primitive_value_in_edict817 = new BitSet(new long[]{0x0000008000000000L});
    public static final BitSet FOLLOW_39_in_edict819 = new BitSet(new long[]{0x0000010000000000L});
    public static final BitSet FOLLOW_40_in_edict822 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_primitive_value_in_factory_list837 = new BitSet(new long[]{0x0000001000000002L});
    public static final BitSet FOLLOW_36_in_factory_list844 = new BitSet(new long[]{0x000002003840B000L});
    public static final BitSet FOLLOW_primitive_value_in_factory_list848 = new BitSet(new long[]{0x0000001000000002L});
    public static final BitSet FOLLOW_GRAPH_in_graph869 = new BitSet(new long[]{0x0000080000000000L});
    public static final BitSet FOLLOW_43_in_graph875 = new BitSet(new long[]{0x0000000010000000L});
    public static final BitSet FOLLOW_var_list_in_graph879 = new BitSet(new long[]{0x0000100000000000L});
    public static final BitSet FOLLOW_44_in_graph881 = new BitSet(new long[]{0x0000004000000000L});
    public static final BitSet FOLLOW_38_in_graph887 = new BitSet(new long[]{0x00000100100307E0L});
    public static final BitSet FOLLOW_set_in_graph892 = new BitSet(new long[]{0x0000000400000000L});
    public static final BitSet FOLLOW_34_in_graph900 = new BitSet(new long[]{0x0000000010000000L});
    public static final BitSet FOLLOW_var_list_in_graph904 = new BitSet(new long[]{0x0000008000000000L});
    public static final BitSet FOLLOW_39_in_graph906 = new BitSet(new long[]{0x00000100100007E0L});
    public static final BitSet FOLLOW_sync_connection_in_graph916 = new BitSet(new long[]{0x00000100100007E0L});
    public static final BitSet FOLLOW_40_in_graph923 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_NAME_in_var_list942 = new BitSet(new long[]{0x0000001000000002L});
    public static final BitSet FOLLOW_36_in_var_list948 = new BitSet(new long[]{0x0000000010000000L});
    public static final BitSet FOLLOW_NAME_in_var_list952 = new BitSet(new long[]{0x0000001000000002L});
    public static final BitSet FOLLOW_sync_body_in_sync_connection967 = new BitSet(new long[]{0x0000080000000000L});
    public static final BitSet FOLLOW_43_in_sync_connection970 = new BitSet(new long[]{0x0000000010000000L});
    public static final BitSet FOLLOW_var_list_in_sync_connection972 = new BitSet(new long[]{0x0000100000000000L});
    public static final BitSet FOLLOW_44_in_sync_connection974 = new BitSet(new long[]{0x0000008000000000L});
    public static final BitSet FOLLOW_39_in_sync_connection976 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_NAME_in_sync_ref995 = new BitSet(new long[]{0x0000000800000002L});
    public static final BitSet FOLLOW_arg_list_in_sync_ref1001 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_35_in_arg_list1013 = new BitSet(new long[]{0x0000000010000000L});
    public static final BitSet FOLLOW_arg_decl_in_arg_list1015 = new BitSet(new long[]{0x0000003000000000L});
    public static final BitSet FOLLOW_36_in_arg_list1019 = new BitSet(new long[]{0x0000000010000000L});
    public static final BitSet FOLLOW_arg_decl_in_arg_list1021 = new BitSet(new long[]{0x0000003000000000L});
    public static final BitSet FOLLOW_37_in_arg_list1026 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_NAME_in_arg_decl1034 = new BitSet(new long[]{0x0000000400000000L});
    public static final BitSet FOLLOW_34_in_arg_decl1036 = new BitSet(new long[]{0x000002003840B000L});
    public static final BitSet FOLLOW_primitive_value_in_arg_decl1038 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_NATIVE_in_native_sync1054 = new BitSet(new long[]{0x0000004000000000L});
    public static final BitSet FOLLOW_38_in_native_sync1056 = new BitSet(new long[]{0x0000000000000800L});
    public static final BitSet FOLLOW_FACTORY_in_native_sync1061 = new BitSet(new long[]{0x0000000400000000L});
    public static final BitSet FOLLOW_34_in_native_sync1063 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_string_in_native_sync1065 = new BitSet(new long[]{0x0000008000000000L});
    public static final BitSet FOLLOW_39_in_native_sync1068 = new BitSet(new long[]{0x0000000000040000L});
    public static final BitSet FOLLOW_PARAMETERS_in_native_sync1072 = new BitSet(new long[]{0x0000000400000000L});
    public static final BitSet FOLLOW_34_in_native_sync1074 = new BitSet(new long[]{0x0000000008000000L});
    public static final BitSet FOLLOW_NUMBER_in_native_sync1076 = new BitSet(new long[]{0x0000008000000000L});
    public static final BitSet FOLLOW_39_in_native_sync1078 = new BitSet(new long[]{0x0000010000004000L});
    public static final BitSet FOLLOW_option_in_native_sync1086 = new BitSet(new long[]{0x0000008000000000L});
    public static final BitSet FOLLOW_39_in_native_sync1089 = new BitSet(new long[]{0x0000010000004000L});
    public static final BitSet FOLLOW_40_in_native_sync1095 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_OPTION_in_option1106 = new BitSet(new long[]{0x0000000010000000L});
    public static final BitSet FOLLOW_NAME_in_option1108 = new BitSet(new long[]{0x0000000400000000L});
    public static final BitSet FOLLOW_34_in_option1110 = new BitSet(new long[]{0x000002003840B000L});
    public static final BitSet FOLLOW_primitive_value_in_option1112 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_boolean_value_in_primitive_value1127 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_string_in_primitive_value1135 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_NUMBER_in_primitive_value1142 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_obj_creation_in_primitive_value1149 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_value_ref_in_primitive_value1157 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_NULL_in_primitive_value1164 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_41_in_primitive_value1171 = new BitSet(new long[]{0x000006003840B000L});
    public static final BitSet FOLLOW_value_list_in_primitive_value1173 = new BitSet(new long[]{0x0000040000000000L});
    public static final BitSet FOLLOW_42_in_primitive_value1176 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_primitive_value_in_value_list1196 = new BitSet(new long[]{0x0000001000000002L});
    public static final BitSet FOLLOW_36_in_value_list1203 = new BitSet(new long[]{0x000002003840B000L});
    public static final BitSet FOLLOW_primitive_value_in_value_list1207 = new BitSet(new long[]{0x0000001000000002L});
    public static final BitSet FOLLOW_TRUE_in_boolean_value1226 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_FALSE_in_boolean_value1233 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_CLASS_in_obj_creation1248 = new BitSet(new long[]{0x0000000020000000L});
    public static final BitSet FOLLOW_string_in_obj_creation1250 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_NAME_in_value_ref1265 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_STRING_in_string1280 = new BitSet(new long[]{0x0000000000000002L});

}